package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.ItemDescMapper;
import com.jt.pojo.Item;
import com.jt.pojo.ItemDesc;
import com.jt.vo.EasyUiTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jt.mapper.ItemMapper;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

@Service
public class ItemServiceImpl implements ItemService {
	//引入itemmapper和itemdescmapper
	@Autowired
	private ItemMapper itemMapper;
	@Autowired
	private ItemDescMapper itemDescMapper;

//	@Override
//	public EasyUiTable findItemByPage(Integer page, Integer rows) {

	/**
	 * 根据ids删除数据
	 * @param ids
	 */
	@Override
	public void deleteItems(Long[] ids) {
//		List<Long> longList = Arrays.asList(ids);
//		itemMapper.deleteBatchIds(longList);
		itemMapper.deleteItemByIds(ids);
		UpdateWrapper<ItemDesc> itemDescUpdateWrapper =
				new UpdateWrapper<>();
		itemDescUpdateWrapper
				.in("item_id",Arrays.asList(ids));
		itemDescMapper.delete(itemDescUpdateWrapper);
	}

	/**
	 * 更改status状态
	 * update(arg1,arg2)
	 * arg1：需要更改的数据
	 * arg2：修改条件构造器
	 * @param status
	 * @param ids
	 */
	@Override
	public void updateStatus(Integer status, Long[] ids) {
		Item item = new Item();
		item.setStatus(status);
		//创建条件构造器
		UpdateWrapper<Item> itemUpdateWrapper = new UpdateWrapper<>();
		//加条件，可能会报错，所以将ids转换为list集合
		itemUpdateWrapper.in("id",Arrays.asList(ids));
		itemUpdateWrapper.set("status",status);
		itemMapper.update(item,itemUpdateWrapper);
	}

	/**
	 * 回显itemDesc中的数据
	 * @param itemId
	 * @return
	 */
	@Override
	public ItemDesc findItemDescById(Long itemId) {
		ItemDesc itemDesc = itemDescMapper.selectById(itemId);
		return itemDesc;
	}
//		System.out.println(page+"==="+rows);
//		//计算其实位置
//		int startIndex = (page - 1) * rows;
//		//查找数据
//		List<Item> items = itemMapper.findItemByPage(startIndex, rows);
//		//计算总记录数
//		Integer count = itemMapper.selectCount(null);
//		return new EasyUiTable(count,items);
//
//	}
	/**
	 * 在进行分页查询时,MP必须添加配置类
	 * 利用MP机制,实现商品查询
	 * @param page
	 * @param rows
	 * @param query
	 * @return
	 */
	@Override
	public EasyUiTable findItemByPage(Integer page, Integer rows, String query) {
		//查询条件根据更新时间进行排序
		QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
		if (StringUtils.isEmpty(query)) {
			queryWrapper.orderByDesc("updated");
		}else {
			queryWrapper.orderByDesc("updated").like("title",query);
		}

		//当用户讲参数传递之后,MP会自己执行分页操作后,将需要的数据进行封装
		//定义分页对象
		IPage<Item> itemPage = new Page<>(page,rows);
		//根据分页对象执行数据库查询,之后获取其他分页数据
		itemPage = itemMapper.selectPage(itemPage, queryWrapper);
		//获取总记录数
		Integer total = (int)itemPage.getTotal();
		//获取分页后的结果
		List<Item> itemList = itemPage.getRecords();
		//返回结果
		return new EasyUiTable(total,itemList);

	}

	/**
	 * 完成商品入库的操作
	 * @param item
	 * @param itemDesc
	 */
	@Override
	@Transactional ////注意控制事务 spring一般只能控制运行时的 检查异常需要手动封装
	public void saveItem(Item item, ItemDesc itemDesc) {
		//设置默认商品为上架状态
		item.setStatus(1);
		//.setCreated(new Date()).setUpdated(new Date());	//交给mybatis plus管理
		itemMapper.insert(item);//入库之后才有主键，将主键动态返回
		//完成商品详情的入库操作，要求item的id应该跟ItemDesc的idemId相等
		//知识点：id应该如何的获取
		//MP支持，用户的操作可以实现自动的主键回显功能
		System.out.println(item.getId());
		itemDesc.setItemId(item.getId());
		itemDescMapper.insert(itemDesc);
	}

	/**
	 * 业务说明：商品修改操作
	 * 同时更新商品说明
	 */
	@Override
	public void updateItem(Item item, ItemDesc itemDesc) {
//		item.setUpdated(new Date());	//交给mybatis plus管理
		itemMapper.updateById(item);
		itemDesc.setItemId(item.getId());
		itemDescMapper.updateById(itemDesc);
	}

}